Теперь я хочу создать форму, в которой я мог бы редактировать обе модели (я хочу показать корзину с продуктами и иметь возможность редактировать цену каждого продукта из этой тележки). Я использовал inlineformset_factory, но он отображает ошибку. Я использую этот путь впервые, поэтому я понятия не имею, что я должен изменить.Форма Django с двумя моделями
'shop.Product' has no ForeignKey to 'shop.Cart'.
models.py
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField(default='0')
def __unicode__(self):
return u"{}({})".format(self.name, self.price)
class Cart(models.Model):
product = models.ManyToManyField(Product)
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
forms.py
class CartForm(forms.ModelForm):
product = forms.ModelMultipleChoiceField(queryset = Product.objects.all(), widget=forms.CheckboxSelectMultiple(),required=True)
name = forms.CharField(max_length=45, label='nazwa')
price = forms.IntegerField(label='price')
class Meta:
model = Cart
fields = ('product', 'name', 'price')
IngredientFormSet = inlineformset_factory(Cart, Product)
views.py
def cart_new(request):
if request.method == "POST":
form = CartForm(request.POST)
if form.is_valid():
cart = form.save(commit=False)
cart.save()
form.save_m2m()
ingredient_formset = IngredientFormSet(request.POST)
if ingredient_formset.is_valid():
ingredient = formset.save(commit=False)
ingredient_formset.save()
return redirect('shop.views.cart_detail', pk=cart.pk)
else:
form = CartForm()
return render(request, 'shop/cart_edit.html', {'form': form})
ошибка:
Traceback:
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\core\handlers\base.py" in get_response
119. resolver_product = resolver.resolve(request.path_info)
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\core\urlresolvers.py" in resolve
366. for pattern in self.url_patterns:
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\core\urlresolvers.py" in url_patterns
402. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\core\urlresolvers.py" in urlconf_module
396. self._urlconf_module = import_module(self.urlconf_name)
File "D:\Python27\Lib\importlib\__init__.py" in import_module
37. __import__(name)
File "C:\Users\znawca\myapp\league\league\urls.py" in <module>
6. url(r'', include('shop.urls')),
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\conf\urls\__init__.py" in include
33. urlconf_module = import_module(urlconf_module)
File "D:\Python27\Lib\importlib\__init__.py" in import_module
37. __import__(name)
File "C:\Users\znawca\myapp\league\shop\urls.py" in <module>
2. from . import views
File "C:\Users\znawca\myapp\league\shop\views.py" in <module>
2. from .forms import *
File "C:\Users\znawca\myapp\league\shop\forms.py" in <module>
19. IngredientFormSet = inlineformset_factory(Cart, Product)
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\forms\models.py" in inlineformset_factory
1020. fk = _get_foreign_key(parent_model, model, fk_name=fk_name)
File "C:\Users\znawca\myapp\venv\lib\site-packages\django\forms\models.py" in _get_foreign_key
992. parent_model._meta.object_name,
Exception Type: ValueError at/
Exception Value: 'shop.Product' has no ForeignKey to 'shop.Cart'.
Пожалуйста, отправьте свой метод просмотра и полную трассировку стека ошибок. –
Привет @Shang Wang Я отредактировал первое сообщение. Я не знаю, что это все, что вам нужно. – znawca