【发布时间】:2019-01-26 12:11:35
【问题描述】:
我使用以下定义的模型获得了完整性。当我从 django 管理员进行更改并再次保存数据时会发生这种情况。 该错误由 obj.save() 触发。 错误如下:
Exception Type: IntegrityError at /admin/users/data/1/change/
Exception Value: UNIQUE constraint failed: users_data.id
我怎样才能做到这一点。
class Data(models.Model):
author = models.ForeignKey(User, null=True, editable=False, on_delete=models.CASCADE)
address = models.CharField(max_length=300,blank=True,null=True,help_text=("enter the address"))
contact = models.IntegerField(blank=True,null=True,help_text=("enter the contact"))
username = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the username"))
password = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the strong password"))
creation_date = models.DateTimeField(editable=False,null=True)
last_modified = models.DateTimeField(editable=False,null=True)
def save(self,*args, **kwargs):
if not self.creation_date:
self.creation_date = timezone.now()
self.last_modified = timezone.now()
return super(Data, self).save(self,*args, **kwargs)
def __str__(self):
return (self.username)
@receiver(post_save,sender=Data)
def datasaver(sender, instance, **kwargs):
address = instance.address
contact = instance.contact
username = instance.username
user_password = instance.password
class CustomAdmin(admin.ModelAdmin):
search_fields = ('first_name', 'email', 'username', )
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.password = ''
obj.save()
def get_queryset(self, request):
qs = super(CustomAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(author=request.user)
【问题讨论】:
-
您的 post_save 信号处理程序似乎完全没有意义。为什么会有它?
-
但如果您希望我们提供帮助,您将需要显示完整的回溯。
-
不要那样做。使用这个
creation_date = models.DateTimeField(auto_now=True)和last_modified = models.DateTimeField(auto_now_add=True)并删除你的保存方法 -
确实解决了问题。谢谢您的帮助。我真的很感激。
标签: django python-3.x django-models django-admin