2016-05-13 7 views
0

に外部キーオブジェクトを保存することができない、私の2つのモデルがある:私は、フォームを作成しているは、私はビューからのデータを保存しようとしていますmodel.cc

class Customer(models.Model) : 
    name = models.CharField(max_length=25) 
    address = models.CharField(max_length=250) 
    phone_number = models.IntegerField() 
    email = models.EmailField(max_length=35) 
    contact_person = models.CharField(max_length=25) 
    created_date = models.DateTimeField(auto_now_add=True, null=True) 

    def __str__(self): 
     return self.name 

class Product(models.Model): 
    support = models.CharField(max_length=8, choices=support_choice, null=True) 
    amc_date = models.DateField(null=True) 
    amc_product = models.CharField(max_length=500, default="No Products in amc") 
    warranty_date = models.DateField(null=True) 
    warranty_product_list = models.CharField(max_length=500, default="No Products in warranty") 
    product_name = models.CharField(max_length=100, null=True) 
    serial_number = models.CharField(max_length=50, null=True) 
    customer = models.ForeignKey(Customer) 

    def __str__(self): 
     return self.product_name 

models.py製品:私のviews.pyで

class ProductForm(forms.ModelForm): 
support = forms.ChoiceField(choices=support_choice, required=True,) 
amc_date = forms.DateField(required=False, widget=forms.TextInput(attrs={'placeholder': 'ex: 10/25/2006'})) 
amc_product = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': 'Products listed in AMC'})) 
warranty_date = forms.DateField(required=False, widget=forms.TextInput(attrs={'placeholder': 'ex: 10/25/2006'})) 
warranty_product_list = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': 'Products listed in warranty'})) 
product_name = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder':'Product model'})) 
serial_number = forms.CharField(required=True) 

class Meta: 
    model = Product 
    fields = ['support', 'amc_date', 'amc_product', 'warranty_date', 'warranty_product_list', 'product_name', 
       'serial_number'] 

私は製品データベースに外部キーオブジェクトを保存しようとしていますが、私は『Sabaree』「を割り当てることができません 『というエラーを取得しています』: 『Product.customerは』でなければなりません交流顾客 "のインスタンス。

views.py

def product_detail(request): 
cust = request.POST.get('customer_name') 
obj = Customer.objects.all() 
obj1 = obj.filter(name=cust) 
print (cust) 
if request.method == 'POST': 
    form = ProductForm(request.POST) 
    if form.is_valid(): 

     a = form.save(commit=False) 
     a.customer = cust 
     form.save() 

context = {'obj':obj, 'form':form} 
return render(request,"products.html",context) 

と私のテンプレートです:products.html

{% block content %} 
<script type="text/javascript" src="//code.jquery.com/jquery-1.12.0.min.js"></script> 
<script src="{% static 'js/product_detail.js' %}"></script> 
<div class="container"> 
    <h2>Products</h2> 
    <form method="post" action="" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <div class="controls "> 
    <select class="select form-control" id="id_customer_name" name="customer_name"> 
     {% for i in obj %} 
      <option id="{{ i.id }}" value="{{ i.name }}">{{ i.name }}{{ i.id }}</option> 
     {% endfor %} 
    </select> 
    </div> 
    {{ form|crispy }} 
    <input type="submit" class="btn btn-default " value="Submit"> 
</form> 
</div> 
{% endblock %} 

私は製品のテーブルに外部キーとして割り当てられているデータを保存するかどうかはわかりません。

答えて

0

お客様は外部キーであるため、POSTメソッドから取得した値を割り当てることはできません。フォームが送信されるので、私はあなたが言及した方法を使用してみましたが、名前の代わりに、私はレコードのIDを取得

cust_obj = Customer.objects.get(name=cust) # Assuming cust is unique or do a query to return obj 
then while save, 
a.customer = cust 
+0

を次のようにCustomerテーブルオブジェクトに変換し、この

a.customer.name = cust 

かのどちらかをお試しくださいPOSTでの顧客名のIDとデータベースへの保存。 'CUST = request.POST.get( 'CUSTOMER_NAME') cust_obj = Customer.objects.get(ID = CUST) =商品(支持= support1、amc_date = amc_date1、amc_product = amc_product1、warranty_date = warranty_date1、 保証の製品リスト=保証のプロダクト_リスト1、プロダクト名=プロダクト名1、シリアル番号=シリアル番号1、顧客= cust_obj) a.save() ' – itsecurity

関連する問題