使用ForeignKey的Django过滤器不起作用

时间:2016-09-25 10:27:56

标签: python django

我正在构建电子商务,并且无法为卖家创建信息中心。无论我如何尝试过滤处理过的订单,这样我就可以向销售商展示销售的产品,但我无法实现。一些帮助将是一个很大的安慰。以下是我的卖家Mixin我试图创建:

mixins.py

class SellerAccountMixin(LoginRequiredMixin, object):
        account = None
        products = []
        transactions = []
        orders = []
        def get_account(self):
            user = self.request.user
            accounts = SellerAccount.objects.filter(user=user)
            if accounts.exists() and accounts.count() == 1:
                self.account = accounts.first()
                return accounts.first()
            return None

        def get_products(self):
            account = self.get_account()
            products = Product.objects.filter(seller=account)
            self.products = products
            return products

        def get_all_products(self):
            account = self.get_account()
            products = Product.objects.all()
            self.products = products
            return products
        def get_sold_products(self):
            orders = UserCheckout.objects.get(user_user=self.user)
            return orders

卖方/ views.py:

class SellerDashboard(SellerAccountMixin, FormMixin, View):
    form_class = NewSellerForm
    success_url = "/seller/"

    def post(self, request, *args, **kwargs):
        user = self.user
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
    def get(self, request, *args, **kwargs):

        apply_form = self.get_form() #NewSellerForm()
        account = self.get_account()
        exists = account
        active = None
        context = {}
        if exists:
            active = account.active
        if not exists and not active:
            context["title"] = "Apply for Account"
            context["apply_form"] = apply_form
        elif exists and not active:
            context["title"] = "Account Pending"
        elif exists and active:
            context["title"] = "Dashboard"
            #products = Product.objects.filter(seller=account)
            context["products"] = self.get_products()
            context["today_sales"] = self.get_today_sales()
            context["sold_products"] = self.get_sold_products()
            #context["total_profit"] = self.get_total_profit()

        else:
            pass

        return render(request, "sellers/dashboard.html", context)

以上是我的卖家应用程序,我带来的产品型号具有简单的功能。问题是它不允许我在Orders应用程序中使用UserCheckout模型获得处理过的订单。以下是订单应用的快照。

订单/模型。

class UserCheckout(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, blank=True)
    email = models.EmailField(unique=True)

    def __unicode__(self):
        return self.email


ADDRESS_TYPE = (
    ('billing', 'Billing'),
    ('shipping', 'Shipping'),
)

class UserAddress(models.Model):
    user = models.ForeignKey(UserCheckout)
    type = models.CharField(max_length=120, choices=ADDRESS_TYPE)
    street = models.CharField(max_length=120)
    city = models.CharField(max_length=120)
    state = models.CharField(max_length=120)
    zipcode = models.CharField(max_length=120)

    def __unicode__(self):
        return self.street

    def get_address(self):
        return "%s, %s, %s, %s" %(self.street, self.city, self.state, self.zipcode)


CHOICES = (
    ('CreditCard', "CreditCard"),
    ('Cash On Delivery', 'Cash On Delivery'),
    ('PayPal', 'PayPal'),
)


ORDER_STATUS_CHOICES={
    ('created','Created'),
    ('paid','Paid'),
}

class Order(models.Model):
    status = models.CharField(max_length=120, choices=ORDER_STATUS_CHOICES, default='created')
    cart = models.ForeignKey(Cart)
    user = models.ForeignKey(UserCheckout, null=True)
    billing_address = models.ForeignKey(UserAddress, related_name='billing_address', null=True)
    shipping_address = models.ForeignKey(UserAddress, related_name='shipping_address', null=True)
    shipping_total_price = models.DecimalField(max_digits=50, decimal_places=2, default=5.99)
    user_seller = models.ForeignKey(settings.AUTH_USER_MODEL)
    order_total = models.DecimalField(max_digits=50, decimal_places=2, )
    order_id = models.CharField(max_length=20, null=True, blank=True)
    paymethod = models.CharField(max_length=120, choices=CHOICES, default='CreditCard')
    seller = models.ForeignKey(SellerAccount, null=True)

    def __unicode__(self):
        return str(self.cart.id)

我可以获得多种产品,但我需要按卖家和卖家的订单过滤产品。经过多次尝试后,我总是遇到错误:

user has to be a UserCheckout instance:

User "Admin": Must be a "User" instance.

'SellerDashboard' object has no attribute 'user'
  1. 我需要卖家过滤产品。
  2. 我需要卖家提供付费状态的过滤订单。
  3. 卖家帐户模型:

    class SellerAccount(models.Model):
        user = models.ForeignKey(User)
        managers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="manager_sellers", blank=True)
        #orders = models.ManyToManyField(Order)
        active = models.BooleanField(default=False)
        timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    
    
        def __unicode__(self):
            return str(self.user.username)
    
        def get_absolute_url(self):
            return reverse("products:vendor_detail", kwargs={"vendor_name": self.user.username})
    

    我陷入了困境,以至于我没有勇气继续使用django了。请帮忙。

0 个答案:

没有答案