Попытка добавить данные в базу данных Postgresql с помощью psycopg2

Я смог создать скрипт для добавления данных прямо в таблицу Postgresql. Единственная проблема - это ManyToManyFields. Хотя я могу добавить данные, я не могу связать их с ManyToMany.

Вот мой models.py

class Category(MPTTModel):
    name = models.CharField(max_length=150, unique=True)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __str__(self):
        return self.name

from django.urls import reverse

class Listing(models.Model):
    name = models.CharField('Business Name', max_length=250)
    address = models.CharField('Address', max_length=300)
    phone_number = models.CharField('Phone Number', max_length=20)
    web = models.URLField('Website')
    category = models.ManyToManyField(Category)
    main_image = models.CharField('Image Link', max_length=500)

    LISTING_STATUS = (
        ('a', 'Active'),
        ('e', 'Expired'),
        ('i', 'Inactive'),
        ('c', 'Claimed'),
    )

    status = models.CharField(
        max_length=1,
        choices=LISTING_STATUS,
        blank=True,
        default='a',
        help_text='Listing Status',
    )
    def get_cats(self):
        return ", ".join([str(p) for p in self.category.all()])
    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('listing-detail', args=[str(self.id)])

В другом файле я создал другой код для добавления информации в базу данных:

def insert(name, address, phone_number, web, status, main_image, ):
    conn = psycopg2.connect("host=localhost dbname=augustalife user=postgres")
    cur = conn.cursor()
    cur.execute("INSERT INTO listings_listing (name, address, phone_number, web, status, main_image) VALUES (%s,%s,%s,%s,%s,%s);", (name, address, phone_number, web, status, main_image))
    conn.commit()
    conn.close()

Я знаю, что могу вручную связать элементы, если я использую Django shell. Но есть ли способ добавить listing и связать его с соответствующим category?

Заранее спасибо.

Вместо этого вам следует использовать ORM от Django:

def insert(name, address, phone_number, web, status, main_image):
    Listing.objects.create(
        name=name,
        address=address,
        phone_number=phone_number,
        website=web,
        status=status,
        main_image=main_image,
    )

Я не уверен, как вы определяете, какие категории относятся к данному листингу, но процесс связывания категории и листинга тривиален:

listing = Listing.objects.create(...)
category = Category.objects.first()
listing.categories.add(category)
Вернуться на верх