forms.pyКак получить объекты, созданные уполномоченным пользователем (Джанго)
class KomForm(forms.ModelForm):
class Meta:
model = Kom
fields = ('company', 'title',)
models.py
class Company(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
class Kom(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
company = models.ForeignKey(Company, on_delete=models.CASCADE)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
views.py
def kommpred_new(request):
if request.method == "POST":
user = request.user if request.user.is_authenticated() else None
form = KommpredForm(request.POST)
if form.is_valid():
kp = form.save(commit=False)
kp.author = request.user
kp.company=forms.ModelChoiceField(queryset=Company.objects.filter(author_id = self.user.id))
kp.published_date = timezone.now()
kp.save()
return redirect('kommpred_detail', pk=kp.pk)
else:
form = KommpredForm()
return render (request, 'by/kommpred_new.html', {'form': form})
Я пытаюсь для реализации выбора пользователя при создании нового объекта через поле формы ModelChoiceField только те, которыми он является. Пока, метод проб и ошибок, я не могу этого сделать. Мне посоветовали это:
class KomForm (forms.ModelForm):
class Meta:
model = Kom
fields = ('company', 'title',)
def __init __ (self, * args, ** kwargs):
# Call the constructor form and maintain user
super (KomForm, self) .__ init __ (* args, ** kwargs)
if 'user' in kwargs and kwargs [ 'user'] is not None:
user = kwargs.pop ('user')
qs = Company.objects.filter (author__id = user.id)
self.fields [ 'company']. queryset = qs
def your_view (request):
user = request.user if request.user.is_authenticated() else None
form = KomForm (user = user)
return render ('template.html' { 'form': form})
Но все-таки я не выхожу ...
, как передача в поле ModelChoiceField только те объекты, автором которых является объектом создания пользователя компании?
Ваш вопрос немного запутанный, возможно ли еще немного уточнить, что именно вы пытаетесь сделать? – Hybrid
Пользователь сначала создает, например, две компании. Компаний в базе данных бесчисленное множество. Затем пользователь создает объект Kom, связанный с объектом Компании. В форме создания объекта я хотел бы показать пользователю выбор компаний, созданных только этим пользователем. –