2016-05-13 13 views
0

Ich versuche zu retten bin die Daten aus Ansichten zu speichern, Meine beiden Modelle sind:derzeit keine Fremdschlüssel Objekt in die model.cc

models.py

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 

i ein Formular für das geschaffen haben Produkt:

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'] 

in meinem views.py ich versuche, den Fremdschlüssel Objekt in die Datenbank zu speichern, aber ich bin immer einen Fehler „Can not assign‚‚Sabaree‘‘:‚Product.customer‘muss sein ein "C ustomer "Instanz".

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) 

und meine Vorlage ist: 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 %} 

Ich bin nicht sicher, wie die Daten zu speichern, die als Fremdschlüssel in Product-Tabelle zugeordnet ist.

Antwort

0

Da der Kunde ein Fremdschlüssel ist, können Sie den Wert, den Sie von der POST-Methode erhalten, nicht zuweisen. Versuchen Sie entweder dieses

a.customer.name = cust 

oder Sie wandeln es Objekt Customer-Tabelle als

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

ich die Methode versucht folgt verwenden Sie erwähnt, aber anstelle des Namens bekomme ich die ID des Datensatzes, da das Formular sendet, die ID des Kundennamens im POST und dessen Speicherung in der Datenbank. 'cust = request.POST.get ('customer_name') cust_obj = Customer.objects.get (id = cust) a = Produkt (support = support1, amc_date = amc_date1, amc_product = amc_product1, warranty_date = warranty_date1, warranty_product_list = warranty_product_list1, product_name = produktname1, serial_number = serial_number1, customer = cust_obj) a.save() ' danke, dass Sie mir ein paar Anweisungen gegeben haben. – itsecurity

Verwandte Themen