Можно ли исключить опции, которые уже выбраны пользователем и сохранены в таблице?
Это таблицы из моделей .py
class Fruit(models.Model):
name = models.CharField(max_length=250, unique=True, blank=False, null=False)
sort= models.ForeignKey('FruitSort', on_delete=models.SET_NULL, null=True, blank=False)
def __str__(self):
return '%s (%s)' % (self.name, self.sort.name)
class UserFruit(models.Model):
Comment = models.CharField(max_length=55)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
fruit = models.ForeignKey('Fruit', on_delete=models.CASCADE)
class Meta:
unique_together = (("user", "fruit",),)
Это формы. Py, которая генерирует мою форму.
class UserFruit(forms.ModelForm):
class Meta:
model = UserFruit
fields = ('comment', 'fruit')
def __init__(self, *args, **kwargs):
super(UserFruit, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control form-style-alt'
self.fields['comment'].widget.attrs['placeholder'] = 'comment'
self.fields['fruit'].empty_label = 'Please, choose fruit'
Теперь views.py
class Fruit(generic.CreateView):
form_class = UserFruit
template_name = 'fruit.html'
def get(self, request, *args, **kwargs):
form = self.form_class(instance=UserFruit.objects.filter(user=request.user).first())
fruit = UserFruit.objects.filter(user=request.user)
return render(request, self.template_name, {'form': form, 'fruit': fruit})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return redirect('fruit')
И, наконец, шаблон.
<h3>Add a juicy fruit</h3>
<form method="post">
{% csrf_token %}
<div class="form-group">
<div>
<span class="text-danger">{{ error }}</span>
</div>
{{ form.fruit }}
{{ form.comment }}
<button class="btn" type="submit"> Save</button>
</div>
</form>
Я хочу исключить или отключить Фрукты, которые пользователь уже добавил. Кажется, я не нахожу DRY и гладкого решения для этого. Я могу l oop пройти из базы данных и исключить через javascript. Но кажется липким.
Идеи очень ценятся!