Django: Как мне вернуть два разных ModelChoiceFields в одно и то же поле модели? - PullRequest
0 голосов
/ 11 октября 2019

Я хочу, чтобы пользователь мог видеть, к каким категориям он относится, что происходит из модели Private_Users. Я также хочу, чтобы они могли видеть, какую Private_Category они создали.

Первая проблема: private_category2 возвращает объект только от Private_User. Я хочу, чтобы он возвращал объект из Private_Category.

Вторая проблема: я хочу, чтобы private_category2 вводилась в то же поле модели, что и private_category, если private_category никогда не заполнялась.

Есть ли способ сделать это, не создавая новое поле в Private_Category?

forms.py

class PostForm(forms.ModelForm): 

    ...

    private_category = forms.ModelChoiceField(queryset = None, widget=forms.Select(
        attrs={
            'style':'width:33%;'

    }), required=False)



    private_category2 = MyModelChoiceField(queryset = None, widget=forms.Select(
        attrs={
            'style':'width:33%;'

    }), required=False) 



    def __init__(self, user, *args, **kwargs):
        super(PostForm, self).__init__(*args, **kwargs)
        self.fields['private_category'].queryset = Private_Category.objects.all().filter(owner=user)
        self.fields['private_category2'].queryset = Private_Users.objects.all().filter(name=user)

models.py

class Private_Category(models.Model):
    owner = models.ForeignKey(User, related_name='privateowner', on_delete=models.CASCADE, null=True)
    category_password = models.CharField(max_length=50)


    title = models.CharField(max_length=200, unique = True)
    description = models.CharField(max_length=500)
    image = ProcessedImageField(upload_to='category_photo',
                                           processors=[ResizeToFill(500, 500)],
                                           format='JPEG',
                                           options={'quality': 100})
    def __str__(self): 
        return self.title


class Private_Users(models.Model): 
    name = models.CharField(max_length=50, null=True)

    category = models.ForeignKey(Private_Category, null=False, on_delete=models.CASCADE, default=None)

    def __str__(self): 
        return self.name
...