Django 多对一用户唯一约束失败
Django Many-to-one with Users Unique Constraint Failing
我正在做一个项目,其中有一个名为 Investment 的 class。基本上,一个用户可以有很多投资,一个投资可以由很多用户组成。因此,我的 models.py 看起来像这样:
# Not sure if this class is relevant to my question
class UserProfile(models.Model):
user = models.OneToOneField(User)
first_name = models.CharField(max_length=24)
last_name = models.CharField(max_length=24)
phone_number = models.CharField(max_length=12)
account_type = models.CharField(max_length=55, choices=ACCOUNT_TYPES)
def __str__(self):
return self.user.username
class Investment(models.Model):
user = models.ForeignKey(User)
offered_fund = models.ForeignKey(OfferedFunds)
amount = models.IntegerField(default=0)
purchase_date = models.DateTimeField(auto_now_add=True)
def __int__(self):
return self.offered_fund.fund_name.name
和我的 forms.py:
class InvestmentForm(forms.ModelForm):
class Meta:
model = Investment
fields = ('offered_fund','amount')
exclude = ['user']
最后,我的 views.py:
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
所以它在部署时的工作方式是用户选择一个 offered_fund,然后输入一个数量然后点击提交。当我这样做一次时,它会注册,我可以在 Django 管理页面中看到它。但是,我第二次尝试这样做(选择相同或不同的 offered_fund)时出现错误:
UNIQUE constraint failed: users_investment.user_id
知道如何解决这个问题吗?谢谢
您正在使用 ForeignKey
关系,每个 Investment
只允许一个 User
对象。
您应该使用 ManyToManyField
,它允许每个 Investment
有多个 User
。
我正在做一个项目,其中有一个名为 Investment 的 class。基本上,一个用户可以有很多投资,一个投资可以由很多用户组成。因此,我的 models.py 看起来像这样:
# Not sure if this class is relevant to my question
class UserProfile(models.Model):
user = models.OneToOneField(User)
first_name = models.CharField(max_length=24)
last_name = models.CharField(max_length=24)
phone_number = models.CharField(max_length=12)
account_type = models.CharField(max_length=55, choices=ACCOUNT_TYPES)
def __str__(self):
return self.user.username
class Investment(models.Model):
user = models.ForeignKey(User)
offered_fund = models.ForeignKey(OfferedFunds)
amount = models.IntegerField(default=0)
purchase_date = models.DateTimeField(auto_now_add=True)
def __int__(self):
return self.offered_fund.fund_name.name
和我的 forms.py:
class InvestmentForm(forms.ModelForm):
class Meta:
model = Investment
fields = ('offered_fund','amount')
exclude = ['user']
最后,我的 views.py:
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
所以它在部署时的工作方式是用户选择一个 offered_fund,然后输入一个数量然后点击提交。当我这样做一次时,它会注册,我可以在 Django 管理页面中看到它。但是,我第二次尝试这样做(选择相同或不同的 offered_fund)时出现错误:
UNIQUE constraint failed: users_investment.user_id
知道如何解决这个问题吗?谢谢
您正在使用 ForeignKey
关系,每个 Investment
只允许一个 User
对象。
您应该使用 ManyToManyField
,它允许每个 Investment
有多个 User
。