Django不能分配&#34; [<customers:wewew =“”>]&#34;:&#34; Sites.customers_id&#34;必须是&#34;客户&#34;例

时间:2017-06-02 01:45:07

标签: python django object

Python,Django。

我正在尝试创建一个用于将数据插入数据库的表单。尝试通过表单添加新客户网站时出错:

  

/ new_site /上的ValueError无法分配&#34; []&#34;:   &#34; Sites.customers_id&#34;必须是&#34;客户&#34;实例

型号:

class Customers(models.Model):
id = models.AutoField(primary_key=True)
author = models.ForeignKey('auth.User', null=True)
name = models.CharField(max_length=100)
description =  models.TextField()

def __str__(self):
    return self.name

class Meta:
    verbose_name_plural = "Customers"

class Sites(models.Model):
id = models.AutoField(primary_key=True)
customers_id = models.ForeignKey(Customers,null=True)
author = models.ForeignKey('auth.User',blank=True, null=True)
adress = models.CharField(max_length=100,  help_text="Example: http://stackoverflow.com/")
s_login =  models.CharField(max_length=100, blank=True, default='', help_text="Login and password if required." )
s_password = models.CharField(max_length=100,  blank=True, default='')
certificate = models.CharField(max_length=100,blank=True, default='',help_text="File's name")

def __str__(self):
    return self.adress

class Meta:
    verbose_name_plural = "Sites"

形式:

class SitesForm(forms.ModelForm):

customers_id = forms.ModelMultipleChoiceField(queryset=Customers.objects.filter(author_id=1))
adress = forms.CharField(max_length=100, help_text="Example: http://www.stackoverflow.com/")
s_login = forms.CharField(max_length=100,   required=False, help_text="Login and password if required.")
s_password = forms.CharField(max_length=100,  required=False)
certificate = forms.CharField(max_length=100,  required=False, help_text="File's name if required")

class Meta:
    model = Sites
    fields = ( 'customers_id','adress','s_login', 's_password', 'certificate')

def __init__(self, user, *args, **kwargs):
    self.user = user
    super(SitesForm,self).__init__(*args, **kwargs)
    cust = Customers.objects.filter(author_id=user.id)
    self.fields['customers_id'].queryset = cust

查看:

def new_site(request):
if request.method == 'POST':
    form = SitesForm( request.user, request.POST)
    if form.is_valid():
        site = form.save(commit=False)
        site.author = request.user
        cusomer.customers_id = request.customers_id
        site.save()
        return redirect('/customers/')
else:
    form = SitesForm( request.user)
return render(request, 'checker/new_site.html', {'form': form, 'username': auth.get_user(request).username })

3 个答案:

答案 0 :(得分:0)

在views.py

替换

cusomer.customers_id = request.customers_id

cusomer.customers_id = Customers.objects.filter(id=request.customers_id)[0]

它将保存Customer的对象而不是id。

答案 1 :(得分:0)

像这样编辑您的视图,

def new_site(request):
    if request.method == 'POST':
        form = SitesForm( request.user, request.POST)
        if form.is_valid():
            site = form.save(commit=False)
            site.author = request.user
            site.customers_id = Customers.objects.get(author=request.user)
            site.save()
            return redirect('/customers/')
    else:
        form = SitesForm( request.user)
    return render(request, 'checker/new_site.html', {'form': form, 'username': auth.get_user(request).username })

答案 2 :(得分:0)

问题解决了。
在观点中,问题出现在这一行:

cusomer.customers_id = request.customers_id

更改为:

site.customers_id = Customers.objects.filter(id=request.POST.get('customers_id'))[0]

形式的变化:

class Meta:
model = Sites
fields = ( 'customers_id','adress','s_login', 's_password', 'certificate')

所以你需要删除'customers_id'。它看起来像:

class Meta:
model = Sites
fields = ('adress','s_login', 's_password', 'certificate')

谢谢大家!