Ошибка IntegrityError в / collection / order / FOREIGN KEY ошибка при добавлении нового объекта - PullRequest
0 голосов
/ 18 апреля 2020

Привет, я только что изучил django и пытался создать форму модели с манимаными отношениями между элементом и порядком ниже, это мой фрагмент кода.

models.py
class Item(models.Model):
    name = models.CharField(max_length=25,default="",primary_key=True)
    weight = models.FloatField()
    def __str__(self):
        return  self.name

class Order(models.Model):
    customername = models.CharField(max_length=25,default="")
    item = models.ManyToManyField(Item,default="")
    metal = models.ForeignKey(Material,on_delete=models.CASCADE)
    price = models.IntegerField()
    place = models.CharField(max_length=25)
    orderdate = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return  self.customername

forms.py:

from django import forms
from .models import Order, Material, Item
class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = '__all__'
class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = '__all__'

views.py:
def ItemSaveorUpdate(request):
    if request.method == 'POST':
        form = ItemForm(request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request,messages.SUCCESS,"Movie rating submitted succesfully")
    else:
       form = ItemForm()
    return render(request,'addItem.html',{"form":form})
def OrderSaveorUpdate(request):
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            form.save()
            messages.add_message(request,messages.SUCCESS,"Order added succesfully")
            return redirect('material')
    elif request.method == 'PUT':
        item = Item.objects.get(pk=id)
        form = OrderForm(instance=item)
        form.save()
    else:
        #item = Item.objects.get(pk=id)
        form = OrderForm()
    return render(request,'addOrder.html',{"form":form})

Template additem.html:
<form action="{% url 'item' %}" request="post">
    {% csrf_token %}
    {{form.as_p }}
    <input type="submit" value="add">
</form>

urls.py:
urlpatterns = [
    path('item/', views.ItemSaveorUpdate, name="item"),
    path('material/', views.MaterialSaveorUpdate, name="material"),
    path('order/', views.OrderSaveorUpdate, name="order"),

Я пытаюсь выбрать несколько элементов при создании порядок и после нажатия кнопки добавления выдает ошибку IntegrityError в / collection / order / FOREIGN KEY ограничение не выполнено. Важно отметить, что добавляется заказ, который я вижу в админ-панели, но элементы не выбираются. Пожалуйста, помогите избежать этой проблемы и дайте мне знать, что я пропустил здесь.

Спасибо.

1 Ответ

0 голосов
/ 19 апреля 2020

Проблема решена удалением полей по умолчанию для элемента в классе Order в models.py

item = models.ManyToManyField(Item,default="")

after removing

item = models.ManyToManyField(Item)

Теперь все работает нормально.

Спасибо.

...