Django与用户唯一约束失败的多对一

时间:2015-11-01 23:42:57

标签: python django django-models django-forms django-views

我正在开展一个项目,我有一个叫做投资的课程。基本上,用户可以有很多投资,投资可以由许多用户组成。因此我的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()

因此,部署时的工作方式是用户选择offer_fund,输入金额然后点击提交。当我这样做一次时,它会注册,我可以在Django Administration页面中看到它。但是,我第二次尝试这样做(选择相同或不同的offer_fund)我得到错误:

  

UNIQUE约束失败:users_investment.user_id

关于如何解决这个问题的任何想法?感谢。

1 个答案:

答案 0 :(得分:2)

您正在使用id关系,该关系仅为每个ForeignKey提供一个User个对象。

您应该使用ManyToManyFieldInvestmentUserInvestment