Ошибка программирования в / cart / address / column order_useraddress.type не существует - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать приложение электронной коммерции. А для использования адреса (биллинг и доставка) хочется что-то вроде ниже. Здесь есть модель с именем Order и UserAddress, которая имеет вид

class Order(models.Model):
    cart = models.ForeignKey(Cart,on_delete=models.CASCADE)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered_date = models.DateTimeField()
    ordered_total = models.PositiveIntegerField()
    shipping_price = models.PositiveIntegerField(default=0)
    ordered = models.BooleanField(default=False)
    billing_address = models.ForeignKey(UserAddress,related_name='billing_address',on_delete=models.CASCADE)
    shipping_address = models.ForeignKey(UserAddress,related_name='shipping_address',on_delete=models.CASCADE,default=None) 

и

class UserAddress(models.Model):


    BILLING = 'billing'
    SHIPPING = 'shipping'

    ADDRESS_TYPE = (
        (BILLING , 'Billing'),
        (SHIPPING, 'Shipping')
    )

    user = models.ForeignKey(UserCheckout,
                             on_delete=models.CASCADE)

    name = models.CharField(max_length=50)
    phone = models.CharField(max_length=21,null=True)
    street_address = models.CharField(max_length=50)
    home_address = models.CharField(max_length=50)
    type = models.CharField(max_length=100,choices=ADDRESS_TYPE)


    def __str__(self):
        return self.user

    def get_full_address(self):
        return '{0}, {1},{2}'.format(self.name ,self.user,self.phone )

. И мой вид равен

class AddressFormView(FormView):
    form_class = AddressForm
    template_name = 'orders/address_select.html'

    def dispatch(self, request, *args, **kwargs):
        b_address, s_address = self.get_address()
        if not (b_address.exists() and s_address.exists()):
            messages.success(self.request, 'Please add an address before continuing')
            return redirect('add_address') # redirect before checkout
        return super(AddressFormView, self).dispatch(request, *args, **kwargs)

    def get_address(self, *args, **kwargs):
        user_checkout  = self.request.session['user_checkout_id']
        b_address = UserAddress.objects.filter(
            type=UserAddress.BILLING, user_id=user_checkout)
        s_address = UserAddress.objects.filter(
            type=UserAddress.SHIPPING, user_id=user_checkout)
        return b_address, s_address

    def get_form(self):
        form = super(AddressFormView, self).get_form()
        b_address, s_address = self.get_address()
        form.fields['billing_address'].queryset = b_address
        form.fields['shipping_address'].queryset = s_address
        return form

    def form_valid(self, form, *args, **kwargs):
        billing_address = form.cleaned_data['billing_address']
        shipping_address = form.cleaned_data['shipping_address']
        self.request.session['billing_address_id'] = billing_address.id
        self.request.session['shipping_address_id'] = shipping_address.id
        return super(AddressFormView, self).form_valid(form, *args, **kwargs)

    def get_success_url(self):
        return reverse('checkout')

. Приведенный выше вид использовал форму ,

class AddressForm(forms.Form):
    billing_address = forms.ModelChoiceField(queryset=UserAddress.objects.filter(type=UserAddress.BILLING),empty_label=None,widget=forms.RadioSelect)
    shipping_address = forms.ModelChoiceField(queryset=UserAddress.objects.filter(type=UserAddress.SHIPPING),empty_label=None,widget=forms.RadioSelect)

Но теперь, когда я получаю URL http://127.0.0.1: 8000 / корзина / адрес / , у меня есть вышеуказанная ошибка. Код сформирован из репозитория github, который работает правильно. Но в моем проекте я использую django пакет Allauth и Custom User Model, который не использовался в проекте github, за которым я следую. Я предполагаю, что это могло быть проблемой, потому что репозиторий github не использовал это. Так есть ли какие-либо подсказки или идеи или какой-либо новый способ сделать это.

1 Ответ

0 голосов
/ 31 марта 2020

Таблица order_useraddress в вашей базе данных не имеет столбца type.

Вы пытались перенести / обновить базу данных?

python manage.py makemigrations

python manage.py migrate

...