Я работаю с приложением для электронной коммерции, где каждый, кто присоединяется, может публиковать свой продукт, но я хочу, чтобы только штатный пользователь публиковал продукт, когда штатный пользователь верен: my models.py:

class User(AbstractBaseUser):
    email = models.EmailField(max_length=255 ,unique=True)
    full_name = models.CharField(max_length=255, blank=True, null=True)
    active = models.BooleanField(default=True)  #can login
    staff = models.BooleanField(default=False)  #staff user non super user
    admin = models.BooleanField(default=False)  #superuser
    time_stamp = models.DateTimeField(auto_now_add=True)
    #USERNAME_FIELD and password are required by default
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    object = UserManager()
    def __str__(self):
        return self.email

    def get_full_name(self):
        if self.full_name:
            return self.full_name
        return self.email

    def get_short_name(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self , app_label):
        return True

    @property
    def is_staff(self):
        return self.staff
    @property
    def is_admin(self):
        return self.admin

    @property
    def is_active(self):
        return self.active

А мой views.py для создания продукта:

class ProductCreateView(LoginRequiredMixin,CreateView):
    model = Product
    template_name = 'product-form.html'
    fields = ['title', 'price' , 'status' , 'size' , 'color', 'image' , 'description']
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

Также я хочу, чтобы, если персонал верен, тогда на панели навигации создавался продукт для пользователя. прямо сейчас, если пользователь аутентифицирован, навигационная панель покажет ему, чтобы он опубликовал продукт

{% if request.user.is_authenticated %}
      <li class="nav-item {% if request.path == logout_url%}active{% endif %}">
        <a class="nav-link" href="{{ logout_url }}">Logout</a>
      </li>
      <li class="nav-item">
          <a class="nav-link" href="{% url 'profile'%}">Profile</a>
        </li>
      <li class="nav-item">
        <a class="nav-link" href="{% url 'products:product-create'%}">Create Product</a>
      </li>
      {% else%}
0
Khîzer Khan 20 Янв 2021 в 18:00

2 ответа

Лучший ответ

Вы можете использовать {{X0 }} на ваш взгляд вот так.

class ProductCreateView(UserPassesTestMixin,CreateView):
    model = Product
    template_name = 'product-form.html'
    fields = ['title', 'price' , 'status' , 'size' , 'color', 'image' , 'description']
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        return self.request.user.is_staff

А в шаблоне вы можете протестировать с этим {% if request.user.is_staff %}

1
arjun 20 Янв 2021 в 15:10