Форма создания и обновления связанной записи
Я только начал изучать django, поэтому надеюсь на вашу помощь. Второй день бьюсь с проблемой. Хочу создать форму на странице карточки для создания и обновления записей коллекции. создал, но запись никак не могу обновить.
код в модель
class Card(models.Model):
id = models.CharField(max_length=256, primary_key=True)
oracle_id = models.CharField(max_length=256)
name = models.CharField(max_length=256)
class Collection(models.Model):
card = models.ForeignKey('Card', on_delete=models.CASCADE)
owner = models.ForeignKey(User, verbose_name='User', on_delete=models.CASCADE)
count = models.IntegerField()
foil = models.BooleanField()
class Meta:
unique_together = [['card','owner', 'foil']]
код в формах
class CollectionAddForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class Meta:
model = Collection
fields = '__all__'
# [
# 'count',
# 'foil',
# 'card',
# 'owner',
# ]
widgets = {'card': forms.HiddenInput(), 'owner': forms.HiddenInput()}
код в views
class CardDetailView( FormMixin, DataMixin, generic.DetailView):
model = Card
template_name = 'catalog/card_detail.html'
form_class = CollectionAddForm
def get_context_data(self, **kwargs):
context = super(CardDetailView, self).get_context_data(**kwargs)
# Количество записей в колекции
if self.request.user:
collectionsFoil = Collection.objects.filter(card=self.object.pk, owner=self.request.user, foil=True)
if collectionsFoil:
context['collectionsFoil'] = Collection.objects.get(card=self.object.pk, owner=self.request.user,
foil=True).id
coolectObj = get_object_or_404(Collection, id=context['collectionsFoil'])
context['collection_non_foil'] = CollectionAddForm(instance=coolectObj)
else:
context['collection_non_foil'] = CollectionAddForm(initial={
'card': self.object.pk,
'owner': self.request.user,
'foil': True
})
collectionsNotFoil = Collection.objects.filter(card=self.object.pk, owner=self.request.user, foil=False)
if collectionsNotFoil:
context['collectionsNotFoil'] = Collection.objects.get(card=self.object.pk, owner=self.request.user,
foil=False).id
coolectObj = get_object_or_404(Collection, id=context['collectionsNotFoil'])
context['collection_foil'] = CollectionAddForm(instance=coolectObj)
else:
context['collection_foil'] = CollectionAddForm(initial={
'card': self.object.pk,
'owner': self.request.user,
'foil': False
})
# context['collection_foil'] = CollectionAddForm()
c_def = self.get_user_context(title=self.object.name)
return dict(list(context.items()) + list(c_def.items()))
def get_success_url(self):
return reverse("card_detail", kwargs={'pk': self.object.pk})
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
form.save()
return super(CardDetailView, self).form_valid(form)