Python,Django。
我正在尝试创建一个用于将数据插入数据库的表单。尝试通过表单添加新客户网站时出错:
/ new_site /上的ValueError无法分配" []": " Sites.customers_id"必须是"客户"实例
型号:
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 })
答案 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')
谢谢大家!