ホーム>source

以下に定義されたモデルで整合性を取得します。変更を加え、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)

あなたの答え
  • 解決した方法 # 1

    これをしないでください。 Djangoは、変更日と作成日を保存するより良い方法を提供します。代わりにこれを使用し、上書きされた保存方法と保存後の信号を削除します。

    交換

    creation_date = models.DateTimeField(editable=False,null=True)
    last_modified = models.DateTimeField(editable=False,null=True)
    
    

    creation_date = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    
    

    django datefieldオプション引数を参照してください

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - split()関数の使用後にスライスが機能しない