Django 3 - отображение в FK модели только текущих данных пользователя - PullRequest
2 голосов
/ 07 февраля 2020

Я создаю свое первое приложение с Django, и мне еще предстоит многому научиться, но сейчас я полностью застрял и мне нужна помощь. У меня есть модель для клиентов и билетов. У меня так, что разные пользователи могут сохранять новых клиентов / билеты и просматривать их данные на панели мониторинга только после входа в систему. Однако при создании нового билета есть опция выпадающего списка, чтобы выбрать клиента для билета - и текущий пользователь может чтобы увидеть каждого пользователя клиентов.

Вот код, я поделюсь большим количеством кода, если это необходимо, но я думаю, что это охватывает то, что у меня происходит ...

forms.py

class TicketForm(ModelForm):
    class Meta:
        model = Ticket
        fields = ['number', 'customer','date_created','work_description','mechanics','status']

views.py

def createTickets(request):
    form = TicketForm()
    if request.method == 'POST':
        form = TicketForm(request.POST)
        if form.is_valid():
            newticket = form.save(commit=False)
            newticket.shopowner = request.user
            newticket.save()
            return redirect('tickets')
    context = {
        'form': form
    }
    return render(request, 'createticket.html', context)

models.py

class Ticket(models.Model):
    def default_number():
        no = Ticket.objects.count()
        return no + 1
    shopowner = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
    number = models.CharField(max_length=30, unique=True, default= default_number)
    customer = models.ForeignKey(Customer, default=1, on_delete= models.SET_DEFAULT, blank=True)
    date_created = models.DateField(default=timezone.now)
    work_description = models.TextField(verbose_name="Service Details: ")
    mechanics = models.ForeignKey(Mechanic, default=1, on_delete=models.DO_NOTHING, blank=True, verbose_name="Mechanic")
    status = models.BooleanField(default=True, verbose_name="Open Ticket")
    class Meta:
        verbose_name_plural = "Tickets"

Мне нужен только внешний ключ клиента отображать клиентов текущего пользователя (или «владельца магазина») - то же самое для механика c и, в конечном итоге, автомобиля, но я могу это выяснить, когда узнаю, как получить данные клиента для отображения правильных данных.

1 Ответ

2 голосов
/ 07 февраля 2020

Вам нужно будет немного настроить свою форму, чтобы изменить набор запросов для этого конкретного поля. Нам также нужно передать пользователя из представления:

forms.py

class TicketForm(ModelForm):
    class Meta:
        model = Ticket
        fields = ['number', 'customer', 'date_created', 'work_description', 'mechanics', 'status']

    def __init__(self, user=None, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if user:
            self.fields['customer'].queryset = Customer.objects.filter(shopowner=user)

views.py

def createTickets(request):
    form = TicketForm(user=request.user)
    # ...

Как именно вы определите набор запросов, будет зависеть от того, как вы определили отношения между Customer и Shopowner, но это должно дать вам правильный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...