Как сделать запрос к пользователю customer в модели пользователя, чтобы выполнить запрос и добавить запись в django
У меня есть пользовательская модель пользователя с полем 'customer'. У каждого пользователя есть клиент. Я пытаюсь получить клиента вошедшего пользователя, чтобы при добавлении нарушителя добавлялся правильный клиент для записи.
- Я думаю, что ниже приведено неверное представление. customer=request.user.customer
- Думаю, что в формах ниже неверно. customer__user=self.customer
views.py
@login_required(login_url='login')
def createInfringer(request):
customer=request.user.customer
form = InfringerForm(customer=request.customer)
if request.method == 'POST':
form = InfringerForm(customer, request.POST)
if form.is_valid():
form.save()
return redirect('infringer-list')
context ={'form': form}
return render (request, 'base/infringement_form.html', context)
forms.py
class InfringerForm(ModelForm):
def __init__(self, customer, *args, **kwargs):
self.customer = customer
super(InfringerForm,self).__init__(*args, **kwargs)
self.fields['customer'].queryset = Customer.objects.filter(customer__user=self.customer)
class Meta:
model = Infringer
fields = ['name', 'brand_name','status' , 'customer']
models.py
class Infringer (models.Model):
name = models.CharField(max_length=200)
brand_name = models.CharField(max_length=200, null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
groups = models.ForeignKey(Group, on_delete=models.CASCADE,default=1)
status = models.ForeignKey(Status, on_delete=models.SET_NULL,null=True)
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL,null=True)
class Meta:
ordering = ['-updated', '-created']
def __str__(self):
return self.name
class Customer (models.Model):
name = models.CharField(max_length=200)
email = models.EmailField(max_length=254, default='@cudo.ai')
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
phone_number = PhoneNumberField(blank=True)
groups = models.ForeignKey(Group, on_delete=models.CASCADE,default=1)
player = models.ManyToManyField(Player, related_name='player', blank=True)
is_active = models.BooleanField(default=False)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class User(AbstractUser):
email = models.EmailField(unique=True, null=True)
avatar = models.ImageField(null=True, default="logo.svg")
username = models.CharField(max_length=40, unique=False,
default='')
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL,null=True)
Если я правильно понимаю, вы правильно определили проблемы. Поэтому я думаю, что вам нужно:
- Измените строку 5 в файле views.py:
form = InfringerForm(customer=customer)
- Изменить строку 5 в form.py"
self.fields['customer'].queryset = Customer.objects.filter(customer=customer)
- views.py customer=request.user.customer форма = InfringerForm(customer=customer)
- forms.py self.fields['customer'].queryset = Customer.objects.filter(name=customer) >