Django Query-set Foreign Key в фрейме данных Pandas Получение дублирующихся значений
У меня есть такие модели.
class Product(models.Model):
id = models.UUIDField(primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
status = models.IntegerField(blank=True, null=True)
sellerid = models.ForeignKey(
"Seller", models.DO_NOTHING, db_column="sellerId", blank=True, null=True
) # Field name made lowercase.
groupid = models.ForeignKey(
Group, models.DO_NOTHING, db_column="groupId", blank=True, null=True
) # Field name made lowercase.
createdat = models.DateTimeField(
db_column="createdAt", blank=True, null=True
) # Field name made lowercase.
updatedat = models.DateTimeField(
db_column="updatedAt", blank=True, null=True
) # Field name made lowercase.
class Meta:
managed = False
db_table = "product"
class Group(models.Model):
id = models.UUIDField(primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
status = models.IntegerField(blank=True, null=True)
image = models.CharField(max_length=255, blank=True, null=True)
createdat = models.DateTimeField(
db_column="createdAt", blank=True, null=True
) # Field name made lowercase.
updatedat = models.DateTimeField(
db_column="updatedAt", blank=True, null=True
) # Field name made lowercase.
class Meta:
managed = False
db_table = "group"
class SubCategoryGroup(models.Model):
id = models.UUIDField(primary_key=True)
subcategoryid = models.ForeignKey(
SubCategory, models.DO_NOTHING, db_column="subCategoryId", blank=True, null=True
) # Field name made lowercase.
groupid = models.ForeignKey(
Group, models.DO_NOTHING, db_column="groupId", blank=True, null=True
) # Field name made lowercase.
class Meta:
managed = False
db_table = "sub_category_group"
А затем от подкатегории к категории. Я делаю запрос от Products, чтобы получить все, включая то, к какой категории и подкатегории они принадлежат, в кадр данных, поскольку
Вот запрос, который нужно вставить в кадр данных.
df = pd.DataFrame.from_records(
Product.objects.using("reports")
.filter(createdat__range=[from_date, to_date])
.values_list(
"id",
"name",
"status",
"sellerid__name",
"groupid__name",
"createdat",
"updatedat",
"settlementprice",
),
columns=[
"id",
"name",
"seller name",
"groupid name",
"createdat",
"updatedat",
],
)
new_df = pd.DataFrame.from_records(
SubCategoryGroup.objects.using("reports")
.all()
.values_list(
"subcategoryid__name", "groupid__name", "subcategoryid__categoryid__name"
),
columns=["subcategory name", "groupid name", "category name"],
)
df = pd.merge(df, new_df, left_on="groupid name", right_on="groupid name")
При этом происходит слияние обоих наборов запросов для получения названия категории и названия подкатегории. В кадр данных продуктов, но слияние происходит неправильно. Я получаю дублирующиеся значения в датафрейме и данные не точны. Я что-то упускаю? Пожалуйста, помогите мне, также я не хотел использовать цикл for из-за эффективности, может ли кто-нибудь предложить самый быстрый способ сделать это, кроме dataframe?