[英]How can i make signals in django which can differentiate between put and post method?
我正在使用in_built Django用戶,並希望為每個添加的用戶生成通知,但是我不希望在put
請求上生成通知。它應該僅在post
請求上生成。 我的模特是...
型號
class User(AbstractUser):
gender= models.CharField(choices=GENDER, max_length=10, null=True, blank=True)
role= models.CharField(choices=ROLE_CHOICE, max_length=15, null=True, blank=True)
designation=models.CharField(max_length=225,null=True,blank=True)
employee_id = models.CharField(max_length=20, default=None, null=True)
class Notification(models.Model):
text = models.CharField(max_length=225)
recipient=models.ForeignKey(User,related_name='notification')
timestamp = models.DateTimeField(null=True,blank=True,auto_now_add=True)
unread = models.BooleanField(default=True, blank=False)
send_by= models.ForeignKey(User, null=True,blank=True, related_name='Notification')
在我的信號中,我做出了...
Signals.py
@receiver(post_save, sender= Any_model)
def comment_recieved(sender,**kwargs):
obj= kwargs.get('instance')
recipient=User.objects.get(is_superuser=True)
Notification.objects.create(
recipient= recipient,
comment= obj,
project=obj.project,
type="commented",
send_by=obj.supporter,
text= "%s has commented on %s" % (obj.supporter, obj.project)
)
return None
現在的問題是,每次執行放置或發布請求時,它都會保存用戶實例,因此會創建一個Notification對象。我只想在創建新用戶時創建Notification。
假設您將串行化器用於DRF視圖,因此可以覆蓋用戶串行化器的create()
方法。
class UserSerializer(serializer.ModelSerializer):
...
def create(self, validated_data):
user = User.objects.create(**validated_data)
Notification.objects.create( # fill your fields here )
return user
但是,更清晰的解決方案是在其中編寫自定義管理器並覆蓋create
方法,該方法將同時接受User
和Notification
模型的字段:
class UserManager(models.Manager):
...
def create(self, gender, role ... type #and so on):
user = User(
gender=gender
role=role
...
# other fields
)
user.save()
notification = Notification(
type=type
..
# other fields
)
notification.save()
return user
class User(models.Model):
....
objects = UserManager()
序列化器:
class UserSerializer(serializer.ModelSerializer):
...
def create(self, validated_data):
return User.objects.create(
gender=validated_data.get('gender')
role=validated_data.get('role')
....
type = validated_data.get('type')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.